今天來做擋板及球的移動。
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and paddle_x > 0:
paddle_x -= paddle_speed
if keys[pygame.K_RIGHT] and paddle_x < screen_width - paddle_width:
paddle_x += paddle_speed
ball_x += ball_speed_x
ball_y += ball_speed_y
使用 pygame.key.get_pressed() 來檢查所有目前被按下的按鍵狀態。這個函數會回傳一個布林值的列表,每個元素代表一個按鍵,值為 True 表示該按鍵被按下,False 則表示未被按下。利用這個特性我們可以輕易地檢查玩家是否按下了左右方向鍵 pygame.K_LEFT 或 pygame.K_RIGHT。
然後我們可以根據玩家的按鍵輸入來改變擋板(paddle_x)的橫向位置。程式碼中 if keys[pygame.K_LEFT] and paddle_x > 0 的條件判斷為,若玩家按下了左方向鍵並且擋板還沒有超出邊邊,那麼擋板就會向左移動。這樣的判斷方式有助於防止擋板移出遊戲視窗的範圍,讓遊戲邏輯更加穩定,右邊 if keys[pygame.K_RIGHT] and paddle_x < screen_width - paddle_width 也一樣同樣。這段程式碼還展示了如何透過簡單的變數來控制物件的移動速度。當按下方向鍵時,擋板的 x 座標值(paddle_x)會根據 paddle_speed 的值來做加減法更新,這樣就能夠控制擋板的移動速度。如果想加快擋板的移動,只需要調整 paddle_speed 的值即可。
ball_x += ball_speed_x 和 ball_y += ball_speed_y 會根據球的速度來更新球的座標位置。ball_speed_x 和 ball_speed_y 是球在 x 和 y 軸上的速度值。當這兩個值改變時,球的運動軌跡也會相應改變,像是改變 ball_speed_x 的正負號可以實現球在 x 軸上的左右反彈。
移動擋板時要考慮遊戲畫面邊界,沒有限制在邊框內的話可能算是一種開掛了。設置讓球自行移動蠻挑戰的,要因應速度而改變軌跡,正負號的影響下彈跳的位置便會不一樣。嘗試了好幾種方式,最後是決定用現在這個,比較簡易明瞭。不然其他種如果有問題要修改時時會常麻煩。
那今天就先這樣。